package modeloCarmenSanDiego;

import java.util.*;

import modeloCarmenSanDiego.caracteristicas.*;
import modeloCarmenSanDiego.persistencia.GuardadorDeArchivos;


public class Comisaria {
	
	private static final int tiempoEnHorasDeBuscarSospechosos = 3;
	private Reloj reloj;
	private List<Sospechoso> sospechosos = new ArrayList<Sospechoso>();
	private Sexo sexoBuscado = null;
	private Hobby hobbyBuscado = null;
	private Cabello cabelloBuscado = null;
	private Senia seniaBuscada = null;
	private Vehiculo vehiculoBuscado = null;
	private Juego juego;
	
	public Comisaria(Reloj reloj, Juego juego){
		this.reloj = reloj;
		this.juego = juego;
	}
	
	public void addSospechoso(Sospechoso sospechoso){
		sospechosos.add(sospechoso);
	}
	
	public List<Sospechoso> getSospechosos(){
		return this.sospechosos;
	}
	
	public void setSexo(Sexo sexoABuscar){
		sexoBuscado = sexoABuscar;
	}
	
	public void setHobby(Hobby hobbyABuscar){
		hobbyBuscado = hobbyABuscar;
	}
	
	public void setCabello(Cabello cabelloABuscar){
		cabelloBuscado = cabelloABuscar;
	}
	
	public void setVehiculo(Vehiculo vehiculoABuscar){
		vehiculoBuscado = vehiculoABuscar;
	}
	
	public void setSenia(Senia seniaABuscar){
		seniaBuscada = seniaABuscar;
	}
	
	public List<String> buscarSospechosos(){
		Sospechoso sospechosoBuscado = new Sospechoso(null, sexoBuscado, hobbyBuscado, cabelloBuscado, seniaBuscada, vehiculoBuscado);
		List<String> nombresQueCoincidenConDescripcion = new ArrayList<String>();
		for( Sospechoso sospechosoActual : sospechosos ){
			if(sospechosoActual.coincideEnDescripcionCon(sospechosoBuscado))
				nombresQueCoincidenConDescripcion.add(sospechosoActual.getNombre());
		}
		if(nombresQueCoincidenConDescripcion.size() == 1) {
			this.emitirOrdenDeArresto(nombresQueCoincidenConDescripcion.get(0));
		}
		this.reloj.avanzarTiempo(tiempoEnHorasDeBuscarSospechosos);
		return nombresQueCoincidenConDescripcion;
	}

	private void emitirOrdenDeArresto(String nombreDelSupuestoLadron) {
		this.juego.setOrdenDeArresto(new OrdenDeArresto(nombreDelSupuestoLadron));
	}

	public void guardarSospechosos(String nombreArchivoSospechososGuardados) {
		(new GuardadorDeArchivos()).guardarSospechosos(this.sospechosos, nombreArchivoSospechososGuardados);
		
	}
}

